gic v3: Turn macros into static inline functions
authorAntonio Nino Diaz <[email protected]>
Mon, 13 Aug 2018 14:29:29 +0000 (15:29 +0100)
committerAntonio Nino Diaz <[email protected]>
Thu, 30 Aug 2018 08:22:15 +0000 (09:22 +0100)
Change-Id: Ib587f12f36810fc7d4f4b8f575195554299b8ed4
Signed-off-by: Antonio Nino Diaz <[email protected]>
drivers/arm/gic/v3/gicv3_private.h
include/drivers/arm/gicv3.h

index e1c0775f7e1fd63b8d7941d7be26cf6f66310e44..357a76f90e6543c8c61577f6d44d2517cd57e531 100644 (file)
  * GICD_IROUTER. Bits[31:24] in the MPIDR are cleared as they are not relevant
  * to GICv3.
  */
-#define gicd_irouter_val_from_mpidr(_mpidr, _irm)              \
-       ((_mpidr & ~(0xff << 24)) |                     \
-        (_irm & IROUTER_IRM_MASK) << IROUTER_IRM_SHIFT)
+static inline u_register_t gicd_irouter_val_from_mpidr(u_register_t mpidr,
+                                                      unsigned int irm)
+{
+       return (mpidr & ~(U(0xff) << 24)) |
+               ((irm & IROUTER_IRM_MASK) << IROUTER_IRM_SHIFT);
+}
 
 /*
  * Macro to convert a GICR_TYPER affinity value into a MPIDR value. Bits[31:24]
  * are zeroes.
  */
 #ifdef AARCH32
-#define mpidr_from_gicr_typer(_typer_val)      (((_typer_val) >> 32) & 0xffffff)
+static inline u_register_t mpidr_from_gicr_typer(uint64_t typer_val)
+{
+       return (((typer_val) >> 32) & U(0xffffff));
+}
 #else
-#define mpidr_from_gicr_typer(_typer_val)                               \
-       (((((_typer_val) >> 56) & MPIDR_AFFLVL_MASK) << MPIDR_AFF3_SHIFT) | \
-        (((_typer_val) >> 32) & 0xffffff))
+static inline u_register_t mpidr_from_gicr_typer(uint64_t typer_val)
+{
+       return (((typer_val >> 56) & MPIDR_AFFLVL_MASK) << MPIDR_AFF3_SHIFT) |
+               ((typer_val >> 32) & U(0xffffff));
+}
 #endif
 
 /*******************************************************************************
index c13a5c9e0f2a6195aa56376c0ce402222d5ab232..94318c69df1c24bb27c031ee43b967e8a758bbfe 100644 (file)
 
 #ifndef __ASSEMBLY__
 
+#include <arch_helpers.h>
 #include <gic_common.h>
 #include <interrupt_props.h>
+#include <stdbool.h>
 #include <stdint.h>
 #include <utils_def.h>
 
-#define gicv3_is_intr_id_special_identifier(id)        \
-       (((id) >= PENDING_G1S_INTID) && ((id) <= GIC_SPURIOUS_INTERRUPT))
+static inline bool gicv3_is_intr_id_special_identifier(unsigned int id)
+{
+       return (id >= PENDING_G1S_INTID) && (id <= GIC_SPURIOUS_INTERRUPT);
+}
 
 /*******************************************************************************
  * Helper GICv3 macros for SEL1
  ******************************************************************************/
-#define gicv3_acknowledge_interrupt_sel1()     read_icc_iar1_el1() &\
-                                                       IAR1_EL1_INTID_MASK
-#define gicv3_get_pending_interrupt_id_sel1()  read_icc_hppir1_el1() &\
-                                                       HPPIR1_EL1_INTID_MASK
-#define gicv3_end_of_interrupt_sel1(id)                write_icc_eoir1_el1(id)
+static inline uint32_t gicv3_acknowledge_interrupt_sel1(void)
+{
+       return (uint32_t)read_icc_iar1_el1() & IAR1_EL1_INTID_MASK;
+}
 
+static inline uint32_t gicv3_get_pending_interrupt_id_sel1(void)
+{
+       return (uint32_t)read_icc_hppir1_el1() & HPPIR1_EL1_INTID_MASK;
+}
+
+static inline void gicv3_end_of_interrupt_sel1(unsigned int id)
+{
+       write_icc_eoir1_el1(id);
+}
 
 /*******************************************************************************
  * Helper GICv3 macros for EL3
  ******************************************************************************/
-#define gicv3_acknowledge_interrupt()          read_icc_iar0_el1() &\
-                                                       IAR0_EL1_INTID_MASK
-#define gicv3_end_of_interrupt(id)             write_icc_eoir0_el1(id)
+static inline uint32_t gicv3_acknowledge_interrupt(void)
+{
+       return (uint32_t)read_icc_iar0_el1() & IAR0_EL1_INTID_MASK;
+}
+
+static inline void gicv3_end_of_interrupt(unsigned int id)
+{
+       return write_icc_eoir0_el1(id);
+}
 
 /*
  * This macro returns the total number of GICD registers corresponding to